// #include <iostream>
// using namespace std;
// class A {
// public:
//     A() {

//     }
// };
// void func() {
//     throw A();
// }
// int main() {
//     try {
//         func();
//     }catch(A& t) {
//         cout << "捕获异常成功了" << endl;
//     }
//     return 0;
// }
// #include <iostream>
// #include <mutex>
// #include <thread>
// using namespace std;
// namespace xywl {
//     template <class T>
//     class myshared_ptr {
//         public:
//             myshared_ptr(T* p = nullptr)
//             :_ptr(p), _count(new int(1)), _mutex(new mutex) {}
//             ~myshared_ptr() {
//                 Release();
//             }
//             myshared_ptr(myshared_ptr<T>& other) 
//             :_count(other._count), _ptr(other._ptr), _mutex(other._mutex){
//                 Add();
//             }
//             myshared_ptr<T>& operator=(myshared_ptr<T>& other) {
//                 if(_ptr != other._ptr) {
//                     Release();
//                     _count = other._count;
//                     _ptr = other._ptr;
//                     Add();
//                 }
//                 return *this;
//             }
//             int use_count() {
//                 return *_count;
//             }
//             T& operator*() {
//                 return *_ptr;
//             }
//             T* operator->() {
//                 return _ptr;
//             }
//         private: 
//             void Release() {
//                 _mutex->lock();
//                 bool flag = false;
//                 if(--(*_count) == 0) {
//                     delete _ptr;
//                     delete _count;
//                     flag = true;
//                 }
//                 _mutex->unlock();
//                 if(flag) {
//                     delete _mutex;
//                 }
//             }
//             void Add() {
//                 _mutex->lock();
//                 (*_count)++;
//                 _mutex->unlock();
//             }
//         private:
//             int* _count; // 引用计数
//             T* _ptr;
//             mutex* _mutex;
//     };
// }

// using namespace xywl;


// struct Test {
//     Test(int n) : _n(n) {
//         cout << "Test(" << _n << ") constructed" << endl;
//     }
//     ~Test() {
//         cout << "Test(" << _n << ") destroyed" << endl;
//     }
//     void Print() const {
//         cout << "Test value: " << _n << endl;
//     }
// private:
//     int _n;
// };

// int main() {
//     {
//         myshared_ptr<Test> sp1(new Test(10));
//         cout << "sp1.use_count() = " << sp1.use_count() << endl; // 1

//         {
//             myshared_ptr<Test> sp2(sp1);
//             cout << "After sp2(sp1):" << endl;
//             cout << "sp1.use_count() = " << sp1.use_count() << endl; // 2
//             cout << "sp2.use_count() = " << sp2.use_count() << endl; // 2
//             sp2->Print();
//         } // sp2 离开作用域，引用计数 -1

//         cout << "After sp2 destroyed:" << endl;
//         cout << "sp1.use_count() = " << sp1.use_count() << endl; // 1
//     } // sp1 离开作用域，引用计数变 0，Test对象销毁

//     cout << "main end" << endl;
//     return 0;
// }

// #include <iostream>
// #include <memory>
// using namespace std;

// struct B;

// struct A {
//     shared_ptr<B> bptr;
//     ~A() { cout << "A destroyed\n"; }
// };

// struct B {
//     weak_ptr<A> aptr;  // ✅ 改成 weak_ptr
//     ~B() { cout << "B destroyed\n"; }
// };

// int main() {
//     shared_ptr<A> a(new A);
//     shared_ptr<B> b(new B);

//     a->bptr = b;
//     b->aptr = a;  // 不增加引用计数

//     cout << "main end\n";
//     return 0;
// }



// #include <iostream>
// #include <vector>
// using namespace std;
// int main() {
//     vector<int> a = {73,74,75,71,69,72,76,73};
//     vector<int> b(a.size(), 0);
//     int l = 0, r = 1;
//     int k = 1;
//     while(r < a.size() || l < a.size()) {
//         if(a[l] < a[r]) {
//             b[l] = r - l;
//             l++;
//             r = l + 1;
//             if(r >= a.size()) {
//                     break;
//                 }
//         }else {
//             r++;
//             if(r == a.size()) {
//                 l++;
//                 r = l + 1;
//                 if(r >= a.size()) {
//                     break;
//                 }
//             }
//         }
//     }
//     for(auto& e : b) {
//         cout << e << " ";
//     }
//     return 0;
// }

#include <iostream>
using namespace std;
int main(){
    return 0;
}